package com.ticket.sass.admin.service.impl;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ticket.sass.admin.mapper.CommoditySkuAttrValueMapMapper;
import com.ticket.sass.admin.service.BaseService;
import com.ticket.sass.common.entity.tenant.CommoditySkuAttrValueMapEntity;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * <p>
 * SKU属性值关联 服务实现类
 * </p>
 *
 * @author ywb
 * @since 2024-03-06
 */
@Service
public class CommoditySkuAttrValueMapServiceImpl extends ServiceImpl<CommoditySkuAttrValueMapMapper, CommoditySkuAttrValueMapEntity> implements BaseService<CommoditySkuAttrValueMapEntity> {
    /**
     * 根据 skuIds 查询商品SKU属性名和属性值，返回属性名和属性值的映射关系
     *
     * @param skuIds SKU ID 列表
     * @return 属性名和属性值的映射关系，以 SKU ID 为键，属性名和属性值的映射为值的 Map
     */
    public Map<Long, Map<String, String>> selectAttrAndValueBySkuIds(List<Long> skuIds) {
        if (skuIds == null || skuIds.isEmpty()) {
            return new HashMap<>();
        }
        
        // 将价格方案ID列表转换为逗号分隔的字符串
        String skuIdsStr = String.join(",", skuIds.stream().map(String::valueOf).collect(Collectors.toList()));
        
        // 调用基础 Mapper 方法查询商品SKU属性名和属性值
        List<CommoditySkuAttrValueMapEntity> commoditySkuAttrValueMapEntities = this.baseMapper.selectAttrAndValueBySkuIds(skuIdsStr);
        
        // 创建 Map 用于存储属性名和属性值的映射关系，以及每个 SKU ID 对应的属性名和属性值的映射
        Map<Long, Map<String, String>> skuAttrValueMap = new HashMap<>();
        
        // 遍历查询结果，将属性名和属性值存储到对应的 SKU ID 的映射中
        for (CommoditySkuAttrValueMapEntity entity : commoditySkuAttrValueMapEntities) {
            // 获取当前实体的 SKU ID
            Long currentSkuId = entity.getSkuId();
            // 如果当前 SKU ID 的映射不存在，则创建新的映射
            if (!skuAttrValueMap.containsKey(currentSkuId)) {
                skuAttrValueMap.put(currentSkuId, new HashMap<>());
            }
            // 将属性名和属性值存储到对应的映射中
            skuAttrValueMap.get(currentSkuId).put(entity.getAttrName(), entity.getAttrValueName());
        }
        
        // 返回属性名和属性值的映射关系
        return skuAttrValueMap;
    }
    
    public void removeByCommodityId(Long commodityId) {
        QueryWrapper<CommoditySkuAttrValueMapEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.inSql("sku_id", "SELECT id FROM commodity_skus WHERE commodity_id = " + commodityId);
        remove(queryWrapper);
    }
}
